# 根据45行助教评论修改
from math import sqrt

# 作业一、用类封装一个Math类


class MyMath:
    def __init__(self, num1: float, num2: float):                           # 类中调用函数
        self.num1 = num1
        self.num2 = num2

    # 加                                                                     # 运算公式
    def add(self):
        return self.num1 + self.num2

    # 减
    def sub(self):
        return self.num1 - self.num2

    # 乘
    def mul(self):
        return self.num1 * self.num2

    # 除（Float Division）
    def float_div(self):
        try:
            return self.num1 / self.num2
        except ZeroDivisionError:
            print('不能用 0 做除数！！！')

    # 地板除（Floor Division）
    def floor_div(self):
        try:
            return self.num1 // self.num2
        except ZeroDivisionError:
            print('分母不为零')

    # 取余（Modulus）
    def mod(self):
        return self.num1 % self.num2

    # 乘方（Power）
    def power(self):
        return self.num1 ** self.num2

    # 开方（Square root），平方根
    def my_sqrt(self):
        try:
            return sqrt(self.num1)
        except ValueError:
            print('开放大于0')

    def calculate(self, operate: str):                                              # 符号运算
        func_dict = {'+': self.add, '-': self.sub, '*': self.mul, '/': self.float_div, '//': self.floor_div,
                     '%': self.mod, '**': self.power, 'sqrt': self.my_sqrt}
        if operate == 'sqrt':
            return self.my_sqrt()
        function = func_dict[operate]                                   # 根据助教56行评论修改
        return function()


# 作业二、自由课题, 按照自己的想法, 将身边的事物抽象成类, 并创建多个实例
class People:                                                       # 定义人的行为
    def __init__(self, name):
        self.name = name

    def say(self):
        pass

    def do(self):
        pass


class Teacher(People):                                          # 定义老师的行为
    def __init__(self):
        super().__init__('老师')

    def say(self):
        print(f'{self.name}：上课了')


class Student(People):                                          # 定义同学的行为
    def __init__(self):
        super().__init__('同学')

    def do(self):
        print(f'{self.name}开始做作业')


if __name__ == '__main__':
    mymath = MyMath(20, 4)
    print(mymath.calculate('+'))
    print(mymath.calculate('-'))
    print(mymath.calculate('*'))
    print(mymath.calculate('/'))
    print(mymath.calculate('//'))
    print(mymath.calculate('%'))
    print(mymath.calculate('**'))
    print(mymath.calculate('sqrt'))
    # 创建多个 People 的子类实例
    Te = Teacher()
    St = Student()
    print(Te.name)
    print(St.name)
    Te.say()
    St.do()





